package br.com.firula.to;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

@Entity
@Table(name="usuario_base")
@SequenceGenerator(name="SEQUENCE", sequenceName="usuario_base_seq")
@Inheritance(strategy=InheritanceType.JOINED)
public class UsuarioBaseTO extends BaseTO {

	private static final long serialVersionUID = 644092247464667150L;

	@Id
	@Column(name="id", nullable=false)
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Long id;

	@Column(name="nome", nullable=false)
	private String nome;

	@Column(name="sobrenome", nullable=false)
	private String sobrenome;

	@Column(name="email", nullable=false)
	private String email;

	@Transient
	private String confirmacaoEmail;

	@Column(name="senha", nullable=false)
	private String senha;

	@Transient
	private String confirmacaoSenha;

	@Column(name="apelido")
	private String apelido;

	@Column(name="sexo")
	private String sexo;

	@Column(name="dataNascimento")
	private Date dataNascimento;

	@Transient
	private Integer dia;

	@Transient
	private Integer mes;

	@Transient
	private Integer ano;

	@Column(name="dataInsercao")
	protected Date dataInsercao;

	@Column(name="dataUltimaAtualizao")
	protected Date dataUltimaAtualizao;

	@Column(name="dataUltimoAcesso")
	protected Date dataUltimoAcesso;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idTipoUsuario", nullable = false)
	private TipoUsuarioTO tipoUsuario;

	@OneToMany(fetch = FetchType.LAZY, mappedBy = "usuario")
	private List<TelefoneTO> telefones;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getSobrenome() {
		return sobrenome;
	}

	public void setSobrenome(String sobrenome) {
		this.sobrenome = sobrenome;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getConfirmacaoEmail() {
		return confirmacaoEmail;
	}

	public void setConfirmacaoEmail(String confirmacaoEmail) {
		this.confirmacaoEmail = confirmacaoEmail;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getConfirmacaoSenha() {
		return confirmacaoSenha;
	}

	public void setConfirmacaoSenha(String confirmacaoSenha) {
		this.confirmacaoSenha = confirmacaoSenha;
	}

	public String getApelido() {
		return apelido;
	}

	public void setApelido(String apelido) {
		this.apelido = apelido;
	}

	public String getSexo() {
		return sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public Integer getDia() {
		return dia;
	}

	public void setDia(Integer dia) {
		this.dia = dia;
	}

	public Integer getMes() {
		return mes;
	}

	public void setMes(Integer mes) {
		this.mes = mes;
	}

	public Integer getAno() {
		return ano;
	}

	public void setAno(Integer ano) {
		this.ano = ano;
	}

	public Date getDataInsercao() {
		return dataInsercao;
	}

	public void setDataInsercao(Date dataInsercao) {
		this.dataInsercao = dataInsercao;
	}

	public Date getDataUltimaAtualizao() {
		return dataUltimaAtualizao;
	}

	public void setDataUltimaAtualizao(Date dataUltimaAtualizao) {
		this.dataUltimaAtualizao = dataUltimaAtualizao;
	}

	public Date getDataUltimoAcesso() {
		return dataUltimoAcesso;
	}

	public void setDataUltimoAcesso(Date dataUltimoAcesso) {
		this.dataUltimoAcesso = dataUltimoAcesso;
	}

	public TipoUsuarioTO getTipoUsuario() {
		return tipoUsuario;
	}

	public void setTipoUsuario(TipoUsuarioTO tipoUsuario) {
		this.tipoUsuario = tipoUsuario;
	}

	public List<TelefoneTO> getTelefones() {
		return telefones;
	}

	public void setTelefones(List<TelefoneTO> telefones) {
		this.telefones = telefones;
	}

	@Override
	public String getAbreviation() {
		// TODO Auto-generated method stub
		return null;
	}

}